	export default {
		name: "datafx",
		props: {
		    bgsx: {
                type: Object,
                default: () => ({fields: {},formname: '',kfcx: []})
            },
		    total: {type: Number, default: 0},
		},
		setup(props, {emit}) {
		    const fieldOrder = ref();
		    const newbgsx = ref({aiPrompt: '', pageSize: 20});
		    const showfx = ref(false);
            const isGenerating = ref(false);
            const pollId = ref(null); // 修改为null初始化
            
            // 数据预处理
            const preprocessData = (rawData) => {
                const processed = {
                    total: rawData.length,
                    data: []
                };
                if (rawData.length > 0) {
                    for (let k in props.bgsx.fields) {
                        let field = props.bgsx.fields[k];
                        let row = {};
                        for(let v of rawData) {
                            row[field.name] = v[k] || '';
                        }
                        processed.data.push(row);
                    }
                    
                }
                return processed;
            }

			// AI数据分析
            const generateAIForm = async () => {
                if (!newbgsx.value.aiPrompt.trim()) {
                    ElMessage.warning('请输入需要分析的内容，如语文平均分');
                    return;
                }
                const getData = async () => {
                    const res = await gettabledata({
                        tablename: props.bgsx.tablename,
                        cxtj: props.bgsx.cxtj,
                        page: 1,
                        pageSize: newbgsx.value.pageSize,
                    });
                    return res.items;
                };
                try {
                    isGenerating.value = true; // 禁用按钮
                    const rawData = await getData(); // 获取后端数据
                    const analysisData = preprocessData(rawData);
                    const structuredPrompt = `
                        角色：您是${props.bgsx.formname}数据分析专家
                        用户需求：${newbgsx.value.aiPrompt}
                        输出要求：
                        1. 数值保留两位小数
                        2. 使用中文表述
                        数据特征：
                        - 总记录数：${props.total}
                        - 提交分析记录数：${analysisData.total}
                        - 数据转为json如下：${JSON.stringify(analysisData.data)}
                    `;
                    const res = await blogformai({ prompt: structuredPrompt });
                    if (!res.taskId) {
                        throw new Error('生成任务创建失败');
                    }
                    startLongPolling(res.taskId);
                } catch (error) {
                    ElMessage.error('生成失败: ' + error.message);
                    isGenerating.value = false; // 出错时立即恢复按钮
                }
            };
            
            // 长轮询处理（含超时机制）
            const startLongPolling = (taskId) => {
                let pollingTimeout;
                const timeoutDuration = 300000; // 300秒超时
            
                pollingTimeout = setTimeout(() => {
                    stopLongPolling();
                    ElMessage.error('请求超时，请重试');
                    isGenerating.value = false;
                }, timeoutDuration);
            
                pollId.value = setInterval(async () => {
                    try {
                        const res = await blogformai({ prompt: newbgsx.value.aiPrompt, pollId: taskId });
                        if (res.completed) {
                            clearTimeout(pollingTimeout); // 清除超时
                            stopLongPolling();
                            if (!res.result) throw new Error('回复为空，请重试');
                            fieldOrder.value = marked.parse(res.result);
                            isGenerating.value = false; // 成功完成时恢复按钮
                        }
                    } catch (error) {
                        clearTimeout(pollingTimeout); // 清除超时
                        stopLongPolling();
                        ElMessage.error(`处理失败: ${error.message}`);
                        console.error('完整错误日志:', error);
                        isGenerating.value = false; // 失败时恢复按钮
                    }
                }, 1500);
            };

			const stopLongPolling = () => {
				clearInterval(pollId.value);
				pollId.value = null;
			}

			return {
			    newbgsx,
			    fieldOrder,
			    isGenerating,
                showfx,
                generateAIForm,
                startLongPolling,
                stopLongPolling,
                preprocessData,
                examplePrompts: [
                    {
                        label: '异常值检测',
                        text: '请识别数据中的异常值并给出可能原因'
                    },
                    {
                        label: '数据质量报告',
                        text: '请评估数据完整性并列出缺失字段'
                    },
                    {
                        label: '学生成绩统计',
                        text: '请统计学生的平均分、最高分、最低分和分布情况'
                    },
                    {
                        label: '工资统计',
                        text: '请分析员工工资的平均值、中位数、最高值、最低值以及工资分布情况'
                    },
                    {
                        label: '销售数据分析',
                        text: '请分析销售数据，提供各区域、各产品的销售总额、平均销售额和销售趋势'
                    },
                    {
                        label: '财务报表分析',
                        text: '请对公司的财务报表进行分析，提供各项费用的占比及收入趋势'
                    },
                    {
                        label: '员工绩效分析',
                        text: '请对员工的绩效评分进行统计，分析出绩效较高和较低的员工群体'
                    },
                    {
                        label: '产品质量分析',
                        text: '请分析各产品的质量数据，提供缺陷率、客户投诉数量和合格率'
                    },
                    {
                        label: '时间序列分析',
                        text: '请对时间序列数据进行分析，提供趋势、周期性和异常值'
                    }
                ],
			};
		},
        
    template: `
    <el-dialog title="数据智能分析" v-model="showfx">
        <el-form :model="newbgsx" label-position="top">
			<el-form-item label="输入需求描述" prop="aiPrompt">
				<el-input v-model="newbgsx.aiPrompt" type="textarea" :rows="4" placeholder="请输入需要分析的内容，如语文平均分" />
            </el-form-item>
            <el-form-item label="参与计算行数" prop="pageSize">
                <el-input-number v-model="newbgsx.pageSize" :min="1" :max="1000"  />
            </el-form-item>
            <div class="example-prompts">
                <div class="prompt-title">常用模板：</div>
                <el-tag v-for="(prompt, index) in examplePrompts" :key="index" class="prompt-tag" effect="plain" @click="newbgsx.aiPrompt = prompt.text">
                    {{ prompt.label }}
                </el-tag>
            </div>
            <div v-if="fieldOrder" class="generated-preview">
            	<h4>数据分析结果：</h4>
            	<div class="markdown-content" v-html="fieldOrder"></div>
            </div>
            <el-row justify="center">
                <el-col :span="8" style="text-align: center;margin: 20px;">
                    <el-button type="primary" v-if="total > 0" size="large" :loading="isGenerating" style="margin-right:20px" @click="generateAIForm()">提交分析</el-button>
                    <el-button @click="showfx = false" size="large">取消</el-button>
                </el-col>
    		</el-row>
        </el-form>
    </el-dialog>
    <div style="margin-left: 10px;">
        <el-button type="primary" @click="showfx = true">数据分析</el-button>
    </div>
    `
}